//***************************************************************************//
//*
//* 内容摘要：引用方式的缓存队列
//*	
//* 当前版本：V1.0		
//* 作    者：zhfayuan
//* 完成日期：2016-8-21
//**************************************************************************//
#ifndef PACKETBUFMAN_H
#define PACKETBUFMAN_H

#include "SDPacketBuffer.h"

#ifdef __cplusplus
extern "C" {
#endif

#define MAX_PACKET_SIZE			   1504	
#define FEC_2K_SIZE                1024*2


class CSDMutexX;

typedef struct T_PacketBufManStat
{
	INT32			nLeft;						/* 当前可用的PacketBuffer的数目 */
	INT32			nPeekCount;					/* 系统用掉的PacketBuffer的峰值（可用于调整MAX_1500_BUF_NUM和MAX_500K_BUF_NUM等常数） */
} T_PacketBufManStat;

typedef T_PacketBuffer* (* GETFREEPACKETBUFFER)(void* pPacketBufMan);
typedef void (* PUTPACKETBUFFER)(void* pPacketBufMan, T_PacketBuffer* pPacketBuffer);
typedef void (* PACKETBUFMANGETSTAT)(void* pPacketBufMan, T_PacketBufManStat* pStat);

typedef struct T_PacketBufMan
{
	GETFREEPACKETBUFFER	getFreePacketBuffer;	/* 分配一个PacketBuffer */
	PUTPACKETBUFFER		putPacketBuffer;		/* 放回一个PacketBuffer */
	PACKETBUFMANGETSTAT getStat;				/* 得到本PacketBufMan的统计信息 */

	INT32			nTotal;						/* PacketBuffer总数 */
	INT32			nDataBufSize;				/* PacketBuffer中最后一个字段（数据缓冲区）的大小 */
	T_PacketBuffer*	pFirstFreePacketBuffer;		/* 空闲PacketBuffer链表首指针 */
	T_PacketBuffer* pLastFreePacketBuffer;		/* 空闲PacketBuffer链表尾指针 */

	T_PacketBufManStat	tStat;					/* 本PacketBufMan的统计信息 */
	CSDMutexX*          csMutext;
	char			acName[64];					/* 用于日志显示的名称 */
	INT32			nGetFreeFailedCount;
} T_PacketBufMan;


/********************************************************************************
* 函数名称	: PacketBufMan_CreateNew
* 功能描述	: 创建一个PacketBuffer Manager，可以创建具有不同nDataBufSize的多个PacketBufMan
* 参数说明  : 
*			  输入：nDataBufSize：数据缓冲区大小
*                   nMaxNum：整个媒体子系统共享的PacketBuffer的个数
*             输出：无
* 返 回 值	: T_PacketBufMan*: 创建的PacketBufMan指针
* 日    期  :
* 修改记录  : 
* 修改日期        版本号        修改人        修改内容   
********************************************************************************/                                                                                                                                               
T_PacketBufMan* PacketBufMan_CreateNew(INT32 nDataBufSize, INT32 nInitNum, const char*strName);

/********************************************************************************
* 函数名称	: PacketBufMan_Destroy
* 功能描述	: 销毁PacketBufMan
* 参数说明  : 
*			  输入：pPacketBufMan：需销毁PacketBufMan的指针
*             输出：无
* 返 回 值	: 无
* 日    期  :
* 修改记录  : 
* 修改日期        版本号        修改人        修改内容   
********************************************************************************/                                                                                                                                               
void PacketBufMan_Destroy(T_PacketBufMan *pPacketBufMan);

#ifdef __cplusplus
}
#endif
	
#endif /* PACKETBUFMAN_H */
